package com.demo.java.OD1_50.OD15;

import java.util.Scanner;
import java.util.HashMap;
import java.util.Map;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： TLV 编码 解码问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145511257
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 获取输入的tag和stream字符串
        String tagStr = scanner.nextLine();
        String streamStr = scanner.nextLine();

        // 解析stream
        Map<String, String> map = parseStream(streamStr);

        // 获取指定tag对应的value并输出
        String value = map.get(tagStr);
        if (value != null) {
            System.out.println(value);
        } else {
            System.out.println("Tag not found.");
        }
    }

    /**
     * 解析stream字符串，返回tag和value的映射
     *
     * @param streamStr 输入的流字符串
     * @return tag和value的映射
     */
    static Map<String, String> parseStream(String streamStr) {
        Map<String, String> map = new HashMap<>();
        String[] input = streamStr.split(" ");
        int index = 0;

        while (index < input.length) {
            // 解析tag
            String tag = input[index];

            // 获取length字段，注意此字段是2个字节的16进制表示
            String lengthStr = input[index + 2] + input[index + 1];
            int length = Integer.parseInt(lengthStr, 16);

            // 获取value并加入映射
            StringBuilder sb = new StringBuilder();
            for (int i = index + 3; i < index + 3 + length; i++) {
                sb.append(input[i]).append(" ");
            }

            // 移动到下一个tag
            map.put(tag, sb.toString().trim());
            index += 3 + length;
        }
        return map;
    }
}

